package utils;

public class Converter {

	public static int Bytes2Int(byte[] bytes, int offset) {
        return (bytes[offset] << 24)
                + ((bytes[offset + 1] & 0xFF) << 16)
                + ((bytes[offset + 2] & 0xFF) << 8)
                + (bytes[offset + 3] & 0xFF);
	}
	
	public static void Int2Bytes(int value, byte[] bytes, int offset) {
		bytes[offset] = (byte)(value >>> 24);
		bytes[offset + 1] = (byte)(value >>> 16);
		bytes[offset + 2] = (byte)(value >>> 8);
		bytes[offset + 3] = (byte)value;
	}
	
	public static long Bytes2Long(byte[] bytes, int offset) {
		long v1 = Bytes2Int(bytes, offset);
		long v2 = Bytes2Int(bytes, offset + 4);
		long value = (v1 << 32) + v2;
		return value;
	}
	
	public static void Long2Bytes(long value, byte[] bytes, int offset) {
		long v1 = value >> 32; 
		long v2 = value - (v1 << 32);
		
		Int2Bytes((int) v1, bytes, offset);
		Int2Bytes((int) v2, bytes, offset + 4);
	}
	
	public static String Bytes2String(byte[] bytes, int offset) {
		return new String(bytes, offset, bytes.length - offset);
	}
	
	public static void String2Bytes(String str, byte[] bytes, int offset) {
		byte[] buffer = str.getBytes();
		System.arraycopy(buffer, 0, bytes, offset, buffer.length);
	}
	
}

